package cn.edu.lingnan.part.controller;

import cn.edu.lingnan.part.Utils.TreeUtil;
import cn.edu.lingnan.part.entity.Admin;
import cn.edu.lingnan.part.entity.AdminQuery;
import cn.edu.lingnan.part.entity.MenuVo;
import cn.edu.lingnan.part.entity.SystemMenu;
import cn.edu.lingnan.part.entity.common.CommonResult;
import cn.edu.lingnan.part.service.SystemMenuService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.*;

/**
 * 系统菜单表(SystemMenu)表控制层
 *
 * @author makejava
 * @since 2020-06-03 16:49:06
 */
@Controller
@RequestMapping("systemMenu")
public class SystemMenuController {
    /**
     * 服务对象
     */
    @Resource
    private SystemMenuService systemMenuService;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("selectOne")
    public SystemMenu selectOne(Integer id) {
        return this.systemMenuService.queryById(id);
    }

//    @GetMapping("menus")
//    @ResponseBody
//    public Map<String, Object> menus(){
//        return systemMenuService.queryAll();
//    }

    @RequestMapping("toList")
    public String toList() {
        return "menu/menu_list";
    }

    @RequestMapping("/")
    public String toAdd(Model model){
        model.addAttribute("systemMenu",new SystemMenu());
        return "menu/menu_add";
    }

    @GetMapping("menus")
    @ResponseBody
    public Map<String, Object> menus() {
        Map<String, Object> map = new HashMap<>(16);
        Map<String,Object> home = new HashMap<>(16);
        Map<String,Object> logo = new HashMap<>(16);
        List<SystemMenu> menuList = systemMenuService.queryAll();
        List<MenuVo> menuInfo = new ArrayList<>();
        for (SystemMenu e : menuList) {
            MenuVo menuVO = new MenuVo();
            menuVO.setId(e.getId());
            menuVO.setPid(e.getPid());
            menuVO.setHref(e.getHref());
            menuVO.setTitle(e.getTitle());
            menuVO.setIcon(e.getIcon());
            menuVO.setTarget(e.getTarget());
            menuInfo.add(menuVO);
        }
        map.put("menuInfo", TreeUtil.toTree(menuInfo, 0));
        home.put("title","首页");
        home.put("href","/page/welcome-1");//控制器路由,自行定义
        logo.put("title","后台管理系统");
        logo.put("image","/static/images/back.jpg");//静态资源文件路径,可使用默认的logo.png
        map.put("homeInfo", "{title: '首页',href: '/ruge-web-admin/page/welcome.html'}}");
        map.put("logoInfo", "{title: 'RUGE ADMIN',image: 'images/logo.png'}");
        return map;
    }


//    @RequestMapping("/{id}")
//    @RequestMapping("toEdit")
//    public String toEdit(Integer id, Model model){
//
//        System.out.println(id);
//        SystemMenu systemMenu = systemMenuService.queryById(id);
//        //将调出来页面设置为admin修改的页面
//        model.addAttribute("systemMenu", systemMenu);
//        return "menu/menu_add";
//    }

    @GetMapping("toEdit")
    public String toEdit( Integer id, Model model) {

        SystemMenu systemMenu = systemMenuService.queryById(id);
        model.addAttribute("systemMenu", systemMenu);
        System.out.println("systemMenu:::" + systemMenu);
        System.out.println("id:::" + id);

        return "menu/menu_add";
    }

    /**
     * 右边菜单显示效果
     * @param page
     * @param limit
     * @param systemMenu
     * @return
     */
    @PostMapping("queryAll")//这里也是提交一个表单申请，所以也是用post请求
    @ResponseBody//返回的是数据
    public Object queryAll(Integer page, Integer limit, SystemMenu systemMenu){
        System.out.println(systemMenu);
        CommonResult result = new CommonResult<>();
        IPage<SystemMenu> iPage = systemMenuService.queryAllByLimit(page,limit,systemMenu);
        result.setCode(0);
        result.setCount(iPage.getTotal());
        result.setData(iPage.getRecords());
        return result;
    }



    /**
     * 添加管理员,因为添加编辑用的是同一个页面，所以需要操作进行一个判断
     * 判断当前的操作是添加还是编辑
     * @param systemMenu
     *
     * @return
     */
//    @PostMapping("save")
//    @ResponseBody
//    public Object save(SystemMenu systemMenu) {
//        boolean result = false;
//        //有一个判断逻辑需要处理，就是判断添加的账号是否已存在
////        Admin admin1 = adminService.queryByAccount(admin.getAccount());
//        if (systemMenu.getId() != null) {
////      编辑
//
////      model.addAttribute("msg", "该账号已经存在");
//            result = systemMenuService.update(systemMenu);
//            System.out.println("修改成功");
//        } else {
////            添加
//            //设置注册的时间，调用系统时间
////            systemMenu.setRegData(new Date());
//            //做添加是不会有id的
//            System.out.println("添加成功");
//            result = systemMenuService.insert(systemMenu).getId() != null;
//        }
//        return result;
//    }

    @PostMapping("save")
    @ResponseBody
    public Object save(SystemMenu systemMenu) {
        boolean result = false;
        //判断账号是否存在

        //判断是添加还是编辑
        if (systemMenu.getId() != null) {
            //编辑
            System.out.println(systemMenu.getTitle());
            System.out.println(systemMenu.getPid());
            System.out.println(systemMenu.getHref());
            System.out.println(systemMenu.getSort());
            System.out.println(systemMenu.getId());
            System.out.println("----------------------");
            System.out.println(systemMenu.getIcon());
            System.out.println(systemMenu.getTarget());
            System.out.println(systemMenu.getCreateAt());
            System.out.println(systemMenu.getDeleteAt());
            System.out.println(systemMenu.getRemark());
            System.out.println(systemMenu.getUpdateAt());
            result = systemMenuService.update(systemMenu);
        } else {
            //添加
            result = systemMenuService.insert(systemMenu).getId() != null;
        }

        return result;
    }

    @GetMapping("getAuths")
    @ResponseBody
    public Object getAuths() {
        CommonResult<SystemMenu> result = new CommonResult<>();
        List<SystemMenu> list = systemMenuService.queryAll();
        result.setCode(0);
        result.setCount((long) list.size());
        result.setData(list);

        return result;
    }

    //    @DeleteMapping("deleteById") 先使用post请求
//    @PostMapping("/{ids}")
//    @ResponseBody
//    public boolean deleteById(@PathVariable Integer[] ids){
//        if (ids == null || ids.length == 0){
//            return false;
//        }
//        System.out.println("删除成功");
//        System.out.println(Arrays.toString(ids));
//        return systemMenuService.deleteById(Arrays.asList(ids));
//
//    }
//    @DeleteMapping("/{ids}")
//    @ResponseBody
//    public boolean deleteById(@PathVariable Integer[] ids) {
//        System.out.println("正在删除");
//        System.out.println("ids");
//        if (ids == null || ids.length == 0) {
//            return false;
//        }
//
//        return systemMenuService.deleteById(Arrays.asList(ids));
//    }

    //    @DeleteMapping("deleteById") 先使用post请求
    @PostMapping("/{ids}")
    @ResponseBody
    public boolean deleteById(@PathVariable Integer[] ids){
//        System.out.println(ids);
        if (ids == null || ids.length == 0){
            return false;
        }
//        System.out.println(Arrays.toString(ids));
        systemMenuService.deleteById(Arrays.asList(ids));
        return true;
    }

}